消息系统提供一种通知事件和交换信息的方法。
MessageArguments 是在消息中传递的参数的基类。Kanzi 为不同的节点和触发器提供内置消息类型。例如,ButtonConcept::ClickedMessageArguments 消息用于按钮: 点击 (Button:Click) 触发器, Page::ActivatedMessageArguments 消息用于页面已激活 (Page Activated) 触发器。
您可以写入自己的消息类型来扩展MessageArguments 类。
消息类型描述:
ClickManipulator::ClickMessage 和 ListBoxConcept::ItemSelectedMessage。您可以使用 PropertyType 对象来描述和访问消息参数。 MessageArguments::setArgument 函数集和 MessageArguments::getArgument 函数通过参数底层存储类型检索参数,如 float、Boolean、Vector3 等。
要将消息分派给处理程序,使用 Node::dispatchMessage。该函数定义消息类型和参数,并调用为该消息类型的节点注册的所有处理程序。
Node::dispatchMessage 在函数调用返回之前立即通知处理程序,使处理程序能够立即对消息作出反应。
Kanzi 中的所有消息都是路由消息。当派发消息时,系统在隧道进程中从根节点经过达到消息目标,然后在冒泡进程中返回。在场景图中每个通过的节点处,系统寻找已派发消息的处理程序。这样您可以将处理程序安装在有效拦截消息的图形中任何位置,然后才能达到目的或从多个来源收集消息。
在冒泡阶段处理消息,在隧道阶段拦截或过滤消息。
接收程序作为函数实现,并作为指针传递到 Node::addMessageHandler() 和 kzuMessageDispatcherAddTunnellingHandler()。要为接收程序的实现提供环境,注册时向用户数据提供指针。使用 Node::removeMessageHandler() 移除处理程序。
消息系统带有内置计时器消息支持,可使用 KzuMessageDispatcher 访问。kzuMessageDispatcherAddTimerHandler() 订阅计时器,而 kzuMessageDispatcherRemoveTimerHandler() 取消订阅计时器。订阅期间,设置计时器间隔和计时器行为:
要在 Kanzi Studio 中创建自定义消息:


请参阅设置触发器消息的处理。